package com.zut.chat.service;

import com.zut.chat.entity.ChatBotConfig;
import com.zut.chat.mapper.ChatBotConfigMapper;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

import static com.zut.chat.entity.table.ChatBotConfigTableDef.CHAT_BOT_CONFIG;

/**
 * 聊天机器人配置服务类
 */
@Service
public class ChatBotConfigService extends ServiceImpl<ChatBotConfigMapper, ChatBotConfig> {

    /**
     * 获取所有启用的机器人配置
     */
    public List<ChatBotConfig> getEnabledBots() {
        return list(QueryWrapper.create()
                .where(CHAT_BOT_CONFIG.ENABLED.eq(true))
                .orderBy(CHAT_BOT_CONFIG.CREATE_TIME.asc()));
    }

    /**
     * 获取启用自动回复的机器人配置
     */
    public List<ChatBotConfig> getAutoReplyEnabledBots() {
        return list(QueryWrapper.create()
                .where(CHAT_BOT_CONFIG.ENABLED.eq(true))
                .and(CHAT_BOT_CONFIG.AUTO_REPLY_ENABLED.eq(true))
                .orderBy(CHAT_BOT_CONFIG.CREATE_TIME.asc()));
    }

    /**
     * 根据机器人名称查找配置
     */
    public ChatBotConfig findByBotName(String botName) {
        return getOne(QueryWrapper.create()
                .where(CHAT_BOT_CONFIG.BOT_NAME.eq(botName)));
    }

    /**
     * 启用或禁用机器人
     */
    public boolean toggleBotEnabled(Long botId, boolean enabled) {
        ChatBotConfig config = getById(botId);
        if (config != null) {
            config.setEnabled(enabled);
            return updateById(config);
        }
        return false;
    }

    /**
     * 启用或禁用机器人自动回复
     */
    public boolean toggleAutoReply(Long botId, boolean autoReplyEnabled) {
        ChatBotConfig config = getById(botId);
        if (config != null) {
            config.setAutoReplyEnabled(autoReplyEnabled);
            return updateById(config);
        }
        return false;
    }

    /**
     * 更新机器人配置
     */
    public boolean updateBotConfig(ChatBotConfig config) {
        return updateById(config);
    }

    /**
     * 删除机器人配置
     */
    public boolean deleteBotConfig(Long botId) {
        return removeById(botId);
    }
} 